package com.webchat.common.enums;

import com.webchat.common.constants.WebConstant;
import lombok.Getter;
import org.apache.commons.lang3.StringUtils;

@Getter
public enum RedisKeyEnum {

    /**
     * 统一登录授权码缓存
     */
    OAUTH_CODE_CACHE("OAUTH_CODE_CACHE", 2 * 60L),

    /**
     * 登录用户token
     */
    LOGIN_USER_TOKEN("LOGIN_USER_TOKEN", 24 * 60 * 60L + 60),

    /**
     * 统一登录授权码兑换计数
     */
    OAUTH_CODE_GET_COUNT_CACHE("OAUTH_CODE_GET_COUNT_CACHE", 2 * 60L),

    /***
     * 注册限流，5S内一次
     */
    USER_REGISTRY_LIMIT("USER_REGISTRY_LIMIT", 5L),

    /**
     * 创建群聊限流，10S内一次
     */
    CREATE_GROUP_LIMIT("CREATE_GROUP_LIMIT", 10L),

    /**
     * 创建机器人防重复触发，10S内一次
     */
    CREATE_ROBOT_LIMIT("CREATE_ROBOT_LIMIT", 10L),

    /**
     * 创建公众号防重复触发，10S内一次
     */
    CREATE_ACCOUNT_LIMIT("CREATE_ACCOUNT_LIMIT", 10L),

    /**
     * 公众号列表缓存
     */
    PUBLIC_ACCOUNT_LIST_CACHE("PUBLIC_ACCOUNT_LIST_CACHE", 24 * 60 * 60L),

    /**
     * 用户信息缓存 缓存7天
     */
    USER_INFO_CACHE("USER_INFO_CACHE", 7 * 24 * 60 * 60L),

    /**
     * 用户信息缓存，BY 手机号
     */
    USER_INFO_BY_MOBILE_CACHE("USER_INFO_BY_MOBILE_CACHE", 3 * 24 * 60 * 60L),

    /***
     * 私信用户列表
     */
    MESS_USER_LIST_KEY("MESS_USER_LIST_KEY", -1L),

    /***
     * 用户私信消息
     */
    USER_CHAT_MESS_CACHE_KEY("USER_CHAT_MESS_CACHE_KEY", 7 * 24 * 60 * 60L),

    /**
     * 用户消息生产 消息队列
     */
    QUEUE_WEB_USER_MESSAGE("QUEUE_WEB_USER_MESSAGE", -1L),

    QUEUE_WEB_OPEN_RED_PACKET_MESSAGE("QUEUE_WEB_OPEN_RED_PACKET_MESSAGE", -1L),

    /**
     * 文章发布消息队列
     */
    QUEUE_ARTICLE_PUBLISH_MESSAGE("QUEUE_ARTICLE_PUBLISH_MESSAGE", -1L),

    /**
     * 文章延迟发布消息队列
     */
    QUEUE_ARTICLE_DELAY_PUBLISH_MESSAGE("QUEUE_ARTICLE_DELAY_PUBLISH_MESSAGE", -1L),

    /**
     * 消息模板
     */
    MESSAGE_CONTENT_TEMPLATE_CACHE("MESSAGE_CONTENT_TEMPLATE_CACHE", -1L),

    /**
     * 消息详情缓存
     */
    MESSAGE_DETAIL_CACHE("MESSAGE_DETAIL_CACHE", 30 * 24 * 60 * 60L),

    /**
     * 新消息数缓存
     */
    MESSAGE_UNREAD_COUNT_CACHE("MESSAGE_UNREAD_COUNT_CACHE", -1L),

    /**
     * 消息数量缓存
     */
    MESSAGE_USER_UN_READ_COUNT_CACHE("MESSAGE_USER_UN_READ_COUNT_CACHE", -1L),

    /**
     * 消息列表缓存
     */
    MESSAGE_LIST_CACHE("MESSAGE_LIST_CACHE", -1L),

    /***
     * 私信消息缓存
     */
    MESS_DETAIL_CACHE_KEY("MESS_DETAIL_CACHE_KEY", -1L),

    /**
     * 未读私信数量
     */
    UN_READ_MESS_COUNT_CACHE("UN_READ_MESS_COUNT_CACHE", -1L),

    /**
     * 未读私信人数量
     */
    UN_READ_MESS_USER_SET_CACHE("UN_READ_MESS_USER_SET_CACHE", -1L),

    /***
     * 用户登录Session PREFIX
     */
    USER_SESSION_PREFIX("USER_SESSION_PREFIX", 3 * 24 * 60 * 60L),

    /**
     * 群组下成员用户id列表缓存
     */
    GROUP_USER_ID_LIST_CACHE("GROUP_USER_ID_LIST_CACHE", 7 * 24 * 60 * 60L),

    /**
     * 用户加入的所有群组
     */
    USER_ATTEND_GROUP_ID_LIST_CACHE("USER_ATTEND_GROUP_ID_LIST_CACHE", 7 * 24 * 60 * 60L),

    /**
     * 资源操作的用户列表
     */
    RESOURCE_BEHAVIOR_USERS_CACHE("RESOURCE_BEHAVIOR_USERS_CACHE", -1L),

    /***
     * 用户点赞的资源列表
     */
    USER_BEHAVIOR_RESOURCE_CACHE("USER_BEHAVIOR_RESOURCE_CACHE", -1L),

    /**
     * 社区内容详情缓存
     */
    MOMENT_DETAIL_CACHE("MOMENT_DETAIL_CACHE", 7 * 25 * 60* 60L),

    /**
     * 朋友圈动态列表
     */
    MOMENT_TIME_LINE_CACHE("MOMENT_TIME_LINE_CACHE", 30 * 24 * 60 * 60L),

    MOMENT_TIME_LINE_NONE_HOT_DATE_CACHE("MOMENT_TIME_LINE_NONE_HOT_DATE_CACHE", 5 * 60L),

    /**
     * 外显评论
     */
    COMMENT_OUT_LIST_CACHE("COMMENT_OUT_LIST_CACHE", -1L),

    /**
     * 评论数缓存
     */
    COMMENT_COUNT_CACHE("COMMENT_COUNT_CACHE", -1L),

    /**
     * 红包详情
     */
    RED_PACKET_DETAIL_CACHE("RED_PACKET_DETAIL_CACHE", 2 * 24 * 60 * 60L),

    /**
     * 用户钱包余额
     */
    USER_WALLET_BALANCE_CACHE("USER_WALLET_BALANCE_CACHE", 7 * 24 * 60 * 60L),

    /**
     * 用户钱包余额刷新 加锁
     */
    REFRESH_USER_WALLET_BALANCE_CACHE_LOCK("USER_WALLET_BALANCE_CACHE_LOCK", -1L),

    /**
     * 红包累计被抢次数
     */
    RED_PACKET_GRAD_COUNT("RED_PACKET_GRAD_COUNT", -1L),

    /**
     * 红包剩余可拆分金额
     */
    RED_PACKET_BALANCE_COUNT("RED_PACKET_BALANCE_COUNT", -1L),

    /**
     * 红包领取的用户记录
     */
    RED_PACKET_OPEN_USERS("RED_PACKET_OPEN_USERS", 25 * 60 * 60L),

    /**
     * 红包拆分记录
     */
    RED_PACKET_RECEIVER_TIMELINE_COUNT("RED_PACKET_RECEIVER_TIMELINE_COUNT", -1L),

    /**
     * 公众号单篇文章详情缓存, 3天有效
     */
    ARTICLE_DETAIL_CACHE("ARTICLE_DETAIL_CACHE", 3 * 24 * 60 * 60L),

    /**
     * ES 数据增量同步，最近一次成功同步时间缓存
     */
    ES_SYNC_LAST_TIME("ES_SYNC_LAST_TIME", -1L),

    /**
     * 滑块验证码
     */
    SLIDE_VERIFICATION_CACHE("SLIDE_VERIFICATION_CACHE", 30 * 25 * 60* 60L),
    SLIDE_VERIFICATION_TOKEN_CACHE("SLIDE_VERIFICATION_TOKEN_CACHE", 60L),
    SLIDE_VERIFICATION_TOKEN_VALIDATE_RESULT_CACHE("SLIDE_VERIFICATION_TOKEN_VALIDATE_RESULT_CACHE", 60L),

    /**
     * 抽奖活动缓存
     */
    LOTTERY_ACTIVITY_DETAIL_CACHE("LOTTERY_ACTIVITY_DETAIL_CACHE", 30 * 24 * 60 * 60L),

    /**
     * 历史抽奖活动缓存
     */
    LOTTERY_ACTIVITY_HISTORY_CACHE("LOTTERY_ACTIVITY_HISTORY_CACHE", -1L),

    /**
     * 最近一期活动ID缓存
     */
    LOTTERY_ACTIVITY_LAST_ID_CACHE("LOTTERY_ACTIVITY_LAST_ID_CACHE", -1L),

    /**
     * 抽奖活动奖品余量缓存
     */
    LOTTERY_ACTIVITY_ITEM_STOCK_CACHE("LOTTERY_ACTIVITY_ITEM_STOCK_CACHE", -1L),

    /**
     * 抽奖商品详情缓存
     */
    LOTTERY_ACTIVITY_ITEM_DETAIL_CACHE("LOTTERY_ACTIVITY_ITEM_DETAIL_CACHE", 30 * 24 * 60 * 60L),

    /**
     * 中奖结果缓存
     */
    LOTTERY_ACTIVITY_ORDER_CACHE("LOTTERY_ACTIVITY_ORDER_CACHE", 30 * 24 * 60 * 60L),

    /**
     * 订单详情缓存
     */
    LOTTERY_ACTIVITY_ORDER_DETAIL_CACHE("LOTTERY_ACTIVITY_ORDER_DETAIL_CACHE", 30 * 24 * 60 * 60L),

    /**
     * 用户中奖结果缓存
     */
    LOTTERY_ACTIVITY_USER_ORDER_CACHE("LOTTERY_ACTIVITY_USER_ORDER_CACHE", 30 * 24 * 60 * 60L),

    /**
     * 抽奖结果订单
     */
    QUEUE_LOTTERY_ORDER_MESSAGE("QUEUE_LOTTERY_ORDER_MESSAGE", -1L),

    /**
     * 账号关系列表缓存
     * 基于sorted set实现
     */
    ACCOUNT_RELATION_LIST_CACHE("ACCOUNT_RELATION_LIST_CACHE", 2 * 24 * 60 * 60L),

    /**
     * 待审核的用户好友添加审核列表
     */
    WAIT_CONFIRM_USER_LIST_CACHE("WAIT_CONFIRM_USER_LIST_CACHE", -1L),

    /**
     * 最新对话账号列表，基于Sorted set实现
     */
    CHAT_ACCOUNT_LIST_CACHE("CHAT_ACCOUNT_LIST_CACHE", -1L),

    /**
     * Redis queue prefix name
     */
    WEB_CHAT_REDIS_QUEUE("WEB_CHAT_REDIS_QUEUE", -1L),

    /**
     * Redis 记录群聊房间在线用户
     *
     */
    GROUP_VIDEO_ONLINE_USER_ZSET("GROUP_VIDEO_ONLINE_USER_ZSET", 24 * 60 * 60L),

    PAYMENT_ACCESS_TOKEN_CACHE("PAYMENT_ACCESS_TOKEN_CACHE", 2 * 60 * 60L - 60L),

    /**
     * 支付平台注册应用信息缓存
     */
    PAYMENT_APP_INFO_CACHE("PAYMENT_APP_INFO_CACHE", 24 * 60 * 60L),

    /**
     * 支付平台注册应用信息访问凭证缓存
     */
    PAYMENT_APP_AK_SK_CACHE("PAYMENT_APP_AK_SK_CACHE", 3 * 24 * 60 * 60L),

    ACCESS_APP_AK_SK_CACHE("ACCESS_APP_AK_SK_CACHE", 3 * 24 * 60 * 60L),

    PAYMENT_DEFAULT_APP_INFO_CACHE("PAYMENT_DEFAULT_APP_INFO_CACHE", 5 * 60 * 60L),

    /**
     * 应用交易凭证缓存，2小时有效
     */
    PAYMENT_APP_ACCESS_TOKEN_CACHE("PAYMENT_APP_ACCESS_TOKEN_CACHE", 2 * 60 * 60L),

    /**
     * 交易分布式事务id缓存
     */
    PAYMENT_TRANS_ID_CACHE("PAYMENT_TRANS_ID_CACHE", 15 * 60L),

    /**
     * 订单事务ID缓存
     */
    PAYMENT_ORDER_TRANS_ID_CACHE("PAYMENT_ORDER_TRANS_ID_CACHE", 15 * 60L),

    /**
     * 消息卡片模版配详情置缓存
     */
    MESSAGE_CARD_TEMPLATE_CACHE("MESSAGE_CARD_TEMPLATE_CACHE", 24 * 60 * 60L),

    /**
     * 支付订单缓存
     */
    PAYMENT_ORDER_CACHE("PAYMENT_ORDER_CACHE",  60 * 60L),

    /**
     * 刷新红包详情缓存分布式锁
     */
    LOCK_REFRESH_RED_PACKET_CACHE("LOCK_REFRESH_RED_PACKET_CACHE",  60L),

    /**
     * 拆红包lock
     */
    LOCK_OPEN_RED_PACKET("LOCK_OPEN_RED_PACKET",  60L),

    /**
     * 红包金额预生成金额队列
     */
    QUEUE_RED_PACKET_AMOUNT("QUEUE_RED_PACKET_AMOUNT",  25 * 60 * 60L),

    /**
     * 朋友圈动态基础详情缓存
     */
    MOMENT_BASE_CACHE("MOMENT_BASE_CACHE", 3 * 24 * 60 * 60L),

    /**
     * 动态详情缓存刷新分布式锁
     */
    MOMENT_CACHE_REFRESH_LOCK("MOMENT_CACHE_REFRESH_LOCK",  10L),

    RESOURCE_BEHAVIOR_COUNT_CACHE("RESOURCE_BEHAVIOR_COUNT_CACHE",  3 * 24 * 60 * 60L),

    /**
     * 用户互动资料列表缓存
     */
    USER_BEHAVIOR_RESOURCE_ZSET_CACHE("USER_BEHAVIOR_RESOURCE_ZSET_CACHE", 3 * 24 * 60 * 60L),

    /**
     * 主动刷新用户互动资源列表数据，分布式锁
     */
    USER_BEHAVIOR_RESOURCE_CACHE_INIT_LOCK("USER_BEHAVIOR_RESOURCE_CACHE_INIT_LOCK", 60L),

    /**
     * 资源被互动的用户列表缓存
     */
    RESOURCE_BEHAVIOR_USER_ZSET_CACHE("RESOURCE_BEHAVIOR_USER_ZSET_CACHE", 3 * 24 * 60 * 60L),

    /**
     * 资源被互动的用户列表缓存刷新分布式锁
     */
    RESOURCE_BEHAVIOR_USER_CACHE_INIT_LOCK("RESOURCE_BEHAVIOR_USER_CACHE_INIT_LOCK", 60L),

    /**
     * 我的ai助手，插件详情缓存
     */
    AI_BOT_PLUGIN_DETAIL_CACHE("AI_BOT_PLUGIN_DETAIL_CACHE", 24 * 60 * 60L),

    /**
     * 已经发布的插件code缓存
     */
    AI_BOT_PLUGIN_CODE_LIST_CACHE("AI_BOT_PLUGIN_CODE_LIST_CACHE", 24 * 60 * 60L),

    /**
     * 用户ws session实例注册信息
     */
    USER_WS_SESSION_INSTANCE_CACHE("USER_SESSION_INSTANCE_CACHE", 30 * 60L),

    /**
     * 电商商品分类缓存
     */
    MALL_CATEGORY_LIST_CACHE("MALL_CATEGORY_LIST_CACHE", 7 * 24 * 60 * 60L),

    /**
     * 分类缓存数据刷新分布式锁key
     */
    MALL_CATEGORY_LIST_CACHE_REFRESH_LOCK("MALL_CATEGORY_LIST_CACHE_REFRESH_LOCK", 10L),

    /**
     * 店铺详情信息缓存
     */
    MALL_SHOP_BASE_CACHE("MALL_SHOP_BASE_CACHE", 7 * 24 * 60 * 60L),

    MALL_USER_SHOP_ID_CACHE("MALL_USER_SHOP_ID_CACHE", 3 * 24 * 60 * 60L),

    /**
     * 属性名缓存
     */
    MALL_PROPERTY_NAME_CACHE("MALL_PROPERTY_NAME_CACHE", 7 * 24 * 60 * 60L),

    /**
     * 属性值缓存
     */
    MALL_PROPERTY_VALUE_CACHE("MALL_PROPERTY_VALUE_CACHE", 7 * 24 * 60 * 60L),

    /**
     * 商品详情缓存
     */
    MALL_PRODUCT_DETAIL_CACHE("MALL_PRODUCT_DETAIL_CACHE", 7 * 24 * 60 * 60L),

    /**
     * 商品详情缓存刷新锁
     */
    MALL_PRODUCT_REFRESH_LOCK("MALL_PRODUCT_REFRESH_LOCK", 30L),

    /**
     * 支付交易流程锁
     */
    PAYMENT_PROCESS_LOCK("PAYMENT_PROCESS_LOCK", 30L),

    MALL_PRODUCT_SKU_STOCK_HASH_CACHE("mall:product:stock:%s", 3 * 24 * 60 * 60L),

    MALL_REFRESH_PRODUCT_SKU_STOCK_LOCK("lock:mall:refresh:product:stock:%s", 60L),

    /**
     * 订单详情缓存
     */
    MALL_PRODUCT_ORDER_DETAIL_CACHE("mall:product:order:%s", 30 * 60L),

    /**
     * 用户订单列表缓存 ZSET
     */
    MALL_USER_PRODUCT_ORDER_LIST_CACHE("mall:user:%s:product:order:%s:%s", 30 * 60L),

    SCHEDULE_HANDLER_FAIL_MQ_TASK_PGC_LOCK("SCHEDULE_HANDLER_FAIL_MQ_TASK_PGC_LOCK", 8 * 60L),

    SCHEDULE_HANDLER_FAIL_MQ_TASK_UGC_LOCK("SCHEDULE_HANDLER_FAIL_MQ_TASK_UGC_LOCK", 8 * 60L),

    /**
     * 电商sku与spuid映射关系缓存
     */
    MALL_SKU_SPU_MAPPING_HASH_CACHE("MALL_SKU_SPU_MAPPING_HASH_CACHE", 24 * 60 * 60L),

    /**
     * 刷新电商sku与spuid映射关系缓存Lock
     */
    MALL_REFRESH_SKU_SPU_MAPPING_LOCK("MALL_REFRESH_SKU_SPU_MAPPING_LOCK", 30L),


    /**
     * 电商用户购物车收藏SKU总量
     */
    MALL_USER_CART_SKU_TOTAL_HASH_CACHE("MALL_USER_CART_SKU_TOTAL_HASH_CACHE", 24 * 60 * 60L),

    /**
     * 用户购物车商品sku列表缓存
     */
    MALL_USER_CART_SKU_ZSET_CACHE("MALL_USER_CART_SKU_ZSET_CACHE", 24 * 60 * 60L),
    MALL_USER_CART_SKU_NONE_CACHE("MALL_USER_CART_SKU_NONE_CACHE", 10 * 60L),

    /**
     * 用户购物车店铺列表缓存
     */
    MALL_USER_CART_SHOP_ZSET_CACHE("MALL_USER_CART_SHOP_ZSET_CACHE", 24 * 60 * 60L),
    MALL_USER_CART_SHOP_NONE_CACHE("MALL_USER_CART_SHOP_NONE_CACHE", 10 * 60L),

    /**
     * 用户购物车sku收藏数量缓存
     */
    MALL_USER_CART_SKU_COUNT_HASH_CACHE("MALL_USER_CART_SKU_COUNT_HASH_CACHE", 24 * 60 * 60L),

    /**
     * 商家智能客服对话账号列表缓存
     *
     */
    MALL_CHAT_ACCOUNT_ZSET_CACHE("MALL_CHAT_ACCOUNT_ZSET_CACHE", 24 * 60 * 60L),

    USER_NETTY_CHANNEL_INSTANCE_HASH_CACHE("USER_NETTY_CHANNEL_INSTANCE_CACHE", -1L),

    /**
     * 商家智能客服IM消息列表缓存
     */
    MALL_IM_MESSAGE_HISTORY_CACHE("MALL_IM_MESSAGE_HISTORY_CACHE", 24 * 60 * 60L),

    /**
     * 商家智能客服IM对话session 新消息状态
     */
    MALL_CHAT_SESSION_READ_STATUS_HASH("MALL_CHAT_SESSION_READ_STATUS_HASH", 24 * 60 * 60L),
    /**
     * 数据字典缓存
     */
    SYS_DATA_DICTIONARY_BASE_CACHE("SYS_DATA_DICTIONARY_BASE_CACHE",  24 * 60 * 60L),
    /**
     * 数据字典详情缓存
     */
    SYS_DATA_DICTIONARY_DETAIL_CACHE("SYS_DATA_DICTIONARY_DETAIL_CACHE",  24 * 60 * 60L),

    ;


    RedisKeyEnum(String key, Long expireTime) {
        this.key = key;
        this.expireTime = expireTime;
    }

    private String key;

    /**
     * 有效时间,单位秒
     */
    private long expireTime;

    public String getKey(String... suffix) {
        StringBuilder tmpSuffix = new StringBuilder();
        if (suffix != null && suffix.length > 0) {
            for (String str : suffix) {
                if (StringUtils.isNotBlank(str)) {
                    tmpSuffix.append("_").append(str);
                }
            }
        }
        return WebConstant.REDIS_KEY_PREFIX + this.name() + tmpSuffix;
    }

    /**
     * 占位符KEY风格
     *
     * @param params
     * @return
     */
    public String formatKey(Object... params) {

        return String.format(WebConstant.REDIS_KEY_PREFIX + this.key, params);
    }
}
